///******************** NG.Respate(C)  **********************************
//* 产品名称: Respate 科技
//* 文件名称: String.c
//* 程序作者: 雷帕特公司(南宫子萍)
//* 程序版本: V1.1														   
//* 编制日期: 2019/1/29
//* 功能描述: 字符串处理 相关函数
//* QQ:	2085827949
//**********************************************************************/
#include "LapString.h"



#if 0
/*********************************************************************************
** 函数名称: Hex2Str
** 功能描述: 将hex类型的值 变成10进制字符串
** 输入参数: 要格式化的数值
** 输出参数:
** 返回参数: 字符串个数
**********************************************************************************/
u8 Hex2Str(u32 dat, u8* Buffer)
{
	u32 temp = dat;
	u8 buff[32] = { 0 };
	u8 i = 0;

	while (temp / 10) //将hex类型的值 变成10进制字符串(为倒序)
	{
		buff[i++] = (temp % 10) + '0';
		temp /= 10;
	}
	buff[i++] = (temp + '0');
	dat = i;
	while (i)//将得到的字符串顺序倒过来
	{
		*Buffer = buff[i - 1];
		Buffer++;
		i--;
	}
	return (u8)dat;
}
#endif

/*********************************************************************************
** 函数名称: LAP_ChengeSymbol
** 功能描述: 将负数->正数  正数->负数
** 输入参数:
** 输出参数:
** 返回参数: return response .
**********************************************************************************/
s32 LAP_ChengeSymbol(s32 a)
{
	a = ~a + 1;
	return a;
}


/*********************************************************************************
** 函数名称: Buffer_Clear
** 功能描述: 将缓冲区填充指定数据
** 输入参数:
** 输出参数:
** 返回参数: return response .
**********************************************************************************/
void Buffer_Clear(u8* buff, u8 dat, u8 num)
{

	while (num--)
	{
		buff[num] = dat;
	}
}


/*********************************************************************************
** 函数名称: strcmp
** 功能描述: 将缓冲区填充指定数据
** 输入参数:
** 输出参数:
** 返回参数: return response .
**********************************************************************************/
//int strcmp(const char* str1,const char* str2)
//{
//	
//}



/*********************************************************************************
** 函数名称: LAP_StrSplit
** 功能描述: 分割字符串函数
** 输入参数:
** 输出参数:
** 返回参数: 缓存地址
**********************************************************************************/
void* LAP_StrSplit(const char* str, char* buff, int num)
{
	int i = 0;
	for (i = 0; i < num; i++)
		buff[i] = str[i];
	buff[++i] = '\0';

	return buff;
}


/*********************************************************************************
** 函数名称: LAP_StrSplit
** 功能描述: 分割字符串函数
** 输入参数:
** 输出参数:
** 返回参数: 缓存地址
**********************************************************************************/
void* LAP_StrSplitByStr(const char* str, const char* split,char* buff)
{
	while (*str!=0)
	{

	}

	return buff;
}

char __LAP_Int2Str_BUFF[15] = {0};
void* __LAP_Int2Str(const int dat)
{
	memset(__LAP_Int2Str_BUFF, 0, sizeof(__LAP_Int2Str_BUFF));
	if (LAP_Int2Str(dat, __LAP_Int2Str_BUFF)) return __LAP_Int2Str_BUFF;
	else NULL;
}

/*********************************************************************************
** 函数名称: LAP_Int2Str
** 功能描述: 将int类型的值用变成10进制字符串
** 输入参数:
** 输出参数:
** 返回参数: temp：字符串长度
**********************************************************************************/
int LAP_Int2Str(const int dat, char* buff)
{
	int temp = dat;
	char i = 0;
	char temBuff[20] = { 0 };

	if (dat < 0)temp = ~temp + 1;//将负数转为正数
	
	temBuff[i++] = '\0';
	while (temp / 10)
	{
		temBuff[i++] = (temp % 10) + '0';
		temp /= 10;
	}
	temBuff[i++] = (temp + '0');
	if (dat < 0) temBuff[i++] = '-';
	//printf("%s:\r\n",&temBuff[1]);
	for (temp = 0; i > 0; temp++) *buff++ = temBuff[--i];
	return temp;
}



/*********************************************************************************
** 函数名称: LAP_Str2Float
** 功能描述: 将字符串转换为浮点型
** 输入参数:
** 输出参数:
** 返回参数: 
**********************************************************************************/
float* LAP_Str2Float(const char* str, float* data)
{
	int float_flag = 0;		//浮点型标志位
	char fu_flag = 0;		//负数标志位

	float i = 0;			//整数部分
	float f = 0.0;			//小数部分
	
	if (*str == '-')
	{
		fu_flag = 1; str++;
	}

	while (*str!=0)
	{
		if (*str>='0'&& *str<='9')
		{
			if (float_flag)
			{
				float_flag *= 10;
				f = f * 10 + (*str - '0');
			}
			else i = i*10+(*str - '0');
		}
		else if (*str == '.')
		{
			if (float_flag) break;
			float_flag = 1;
		}
		else break;
		str++;
	}

	if (float_flag > 0)
	{
		f /= (float_flag + 0.0); i =i+ f;
	}
	if (fu_flag) i *= -1;
	*data = i;
	return data;
}



/*********************************************************************************
** 函数名称: LAP_StrCopy_endChar
** 功能描述: 拷贝字符串，指定字符结束拷贝
** 输入参数:
** 输出参数:
** 返回参数:字符串长度;
**********************************************************************************/
int LAP_StrCopy_endChar(const char* src,char* buff,const char end)
{
	int i = 0;
	while ((*src) != end)
	{
		*buff++ = *src++;
		i++;
	}
	*(++buff)= '\0';
	return i;
}



/*********************************************************************************
** 函数名称: LAP_StrMatch
** 功能描述: 拷贝字符串，指定字符结束拷贝
** 输入参数:
** 输出参数:
** 返回参数:字符串长度;
**********************************************************************************/
int LAP_StrMatch(const char* src, char* buff, const char end)
{
	int i = 0;
	while ((*src) != end)
	{
		*buff++ = *src++;
		i++;
	}
	*++buff = '\0';
	return i;
}



/*********************************************************************************
** 函数名称: lap_getFile
** 功能描述: 指定路径下 得到文件
** 输入参数: src:文件路径			Path:分割后的路径 
** 输出参数: 文件名称  NULL:字符串结尾 非文件
** 返回参数: return response .
**********************************************************************************/
char buff[200]={0};
char* lap_getFile(const char* src,char *Path)
{
	char *temp1=NULL;
	char *temp2=NULL;
	char *temp3=NULL;

	//判断第一个字符是否为 '/'
	int flag = !strncmp(src,"/",1);
	
	memset(buff,0,sizeof(buff));
	strcpy(buff,src);
	
	if(src==NULL)
	{
		printf("lap_getFile err src:NULL\n");
		return NULL;
	}
	
	temp2 = strtok(buff,"/");

	while (1)
	{
		temp1 = strtok(NULL,"/");
		if(temp1 !=NULL)
		{
			temp3 = temp2;
			temp2 = temp1;
			if(temp3!=NULL)
			{
				if(flag)
					strcat(Path,"/");
				strcat(Path,temp3);
				flag=1;
			}
		}
		else break;
	}
	
	if(temp2!=NULL)
	{
		if(strstr(temp2,"."))
		{
			return temp2;
		}
		else
		{
			//为文件夹路径
			memset(Path,0,sizeof(Path));
			strcat(Path,src);
			return NULL;
		}
	}
	else return NULL;
}


//lap_creatFile("/root/project/temp1",NULL);
//lap_creatFile("/root/project/temp",NULL);
//lap_creatFile("/root/project/temp/","aa.c");
//lap_creatFile("/root/project/temp","bb.c");
//lap_creatFile(NULL,"temp/cc.h");
/*********************************************************************************
** 函数名称: lap_creatFile
** 功能描述: 创建一个文件的完整路径
** 输入参数: path:文件路径			file:文件名称 
** 输出参数: None.
** 返回参数: return response .
**********************************************************************************/
void lap_creatFile(const char * path,const char * file)
{

	char mkdir[100]="mkdir -p ";
	char touch[140]="touch ";
	char *t_path = (char *)path;
	char temp = 0;
	
	
	int ret = -1;

	if(path!=NULL)//文件路径不为空
	{
		if(file!=NULL)	//文件路径不为空 在path目录下 创建file文件
		{
			
			//判断path最后字符是否为'/'
			while(1)
			{
				t_path++;
				if(*t_path=='\0')	//最后一个字符
				{
					temp  = *(--t_path);
					break;
				}
			}
				
			//得到文件的全路径
			strcat(touch,path);
			if(temp !='/')
				strcat(touch,"/");
			
			strcat(touch,file);
		}
		else	//文件路径为空 文件为空 
		{
			char pbuff[140]={0};
			char* pfile =  NULL;
			
			pfile = lap_getFile(path,pbuff);
			if(pfile!=NULL)
			{
				lap_creatFile(pbuff,pfile);
				return ;
			}
		}
	}
	else 	//文件路径为空 即：在当前目录下创建文件	
	{
		if(file!=NULL)//文件不为空
		{
			//得到文件完整路径
			strcat(touch,file);
		}
		else	//文件路径 与文件皆为空 退出子程序
		{
			return ;
		}
		
	}

	//创建路径
	if(path!=NULL)
	{
		//得到 创建文件夹命令
		strcat(mkdir,path);
		//创建目录
		ret = system(mkdir);
		//lap_errneg(ret,NULL,"lap_creatFile mkdir err!");//错误检查
	}
	
	//调试信息
	//printf("shell cmd: %s\n",mkdir);

	//创建文件
	if(file!=NULL)
	{
		ret = system(touch);
		//lap_errneg(ret,NULL,"lap_creatFile touch err!");//错误检查
	}
}


